package com.yjdb.sanyuantang.modules.Admin.service.Impl;

import com.yjdb.sanyuantang.common.entity.SysAdminRelationRole;
import com.yjdb.sanyuantang.common.entity.SysRole;
import com.yjdb.sanyuantang.common.entity.SysRoleRelationLimit;
import com.yjdb.sanyuantang.common.mapper.SysRoleMapper;
import com.yjdb.sanyuantang.common.mapper.SysRoleRelationLimitMapper;
import com.yjdb.sanyuantang.modules.Admin.DTO.role.RoleDTO;
import com.yjdb.sanyuantang.modules.Admin.mapper.AdminRoleMapper;
import com.yjdb.sanyuantang.modules.Admin.service.AdminRoleService;
import com.yjdb.sanyuantang.modules.Admin.DTO.role.RoleListDTO;
import com.yjdb.sanyuantang.modules.Admin.DTO.role.RolePage;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * packageName com.yjdb.sanyuantang.modules.Admin.service.Impl
 *
 * @author 混沌酱
 * @version 1.0
 * @className AdminRoleServiceImpl
 * @date 2024/3/15
 * @description TODO
 */
@Service
public class AdminRoleServiceImpl implements AdminRoleService {

    @Resource
    private AdminRoleMapper adminRoleMapper;

    @Resource
    private SysRoleMapper sysRoleMapper;

    @Resource
    private SysRoleRelationLimitMapper sysRoleRelationLimitMapper;

    /**
     *
     * @param roleDTO
     */
    @Override
    public void add(RoleDTO roleDTO) {
        SysRole sysRole = new SysRole();
        BeanUtils.copyProperties(roleDTO, sysRole);
        sysRole.setCreateTime(new Date());
        sysRole.setUpdataTime(new Date());
        sysRole.setIsDelete(0);
        sysRole.setIsStatus("1");
        sysRoleMapper.insert(sysRole);
    }

    /**
     *
     * @param id
     */
    @Override
    public void delete(Integer id, String name) {
        SysRole sysRole = new SysRole();
        sysRole.setId(id.longValue());
        sysRole.setIsDelete(1);
        sysRole.setUpdataTime(new Date());
        sysRoleMapper.updateById(sysRole);
    }

    /**
     *
     * @param roleDTO
     */
    @Override
    public void update(RoleDTO roleDTO) {
        SysRole sysRole = new SysRole();
        BeanUtils.copyProperties(roleDTO, sysRole);
        sysRole.setUpdataTime(new Date());
        sysRoleMapper.updateById(sysRole);
    }

    /**
     *
     * @param rolePage
     */
    @Override
    public List<RoleListDTO> list(RolePage rolePage) {
        if (rolePage.getEndTime()==null || rolePage.getEndTime().isEmpty()){
            rolePage.setEndTime("9999-12-31");
        }
        if (rolePage.getStartTime()==null || rolePage.getStartTime().isEmpty()){
            rolePage.setStartTime("1970-01-01");
        }
        List<RoleListDTO> list = adminRoleMapper.list(rolePage);
        return  list;
    }

    /**
     *
     * @param id
     * @param name
     * @param status
     */
    @Override
    public void enable(Integer id, String name, String status) {
        SysRole sysRole = new SysRole();
        sysRole.setId(id.longValue());
        sysRole.setIsStatus(status);
        sysRole.setUpdataTime(new Date());
        sysRoleMapper.updateById(sysRole);
    }

    /**
     *
     * @param id
     * @param permissionIds
     */
    @Override
    public void assign(Integer id, String permissionIds) {
        // 给角色分配权限
        SysRoleRelationLimit sysRoleRelationLimit = new SysRoleRelationLimit();
        sysRoleRelationLimit.setRoleId(id.longValue());
        sysRoleRelationLimit.setLimitId(permissionIds);
        // 判断权限是否存在
        Map<String, Object> filter = new HashMap<>();
        filter.put("role_id", id);
        List<SysRoleRelationLimit> list= sysRoleRelationLimitMapper.selectByMap(filter);
        if (!list.isEmpty()) {
            sysRoleRelationLimit.setId(list.get(0).getId());
            sysRoleRelationLimitMapper.updateById(sysRoleRelationLimit);
        }else {
            sysRoleRelationLimitMapper.insert(sysRoleRelationLimit);
        }
    }
}
